package ufpi.dc.eng2.controle;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
//import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
//import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;
import javax.servlet.http.Part;


@ManagedBean(name = "fileUploadController")
//@RequestScoped
@SessionScoped
public class uploadFilesBean {

    //Primitives
    private static final int BUFFER_SIZE = 6124;
    private String folderToUpload;

    /**
     * Cria uma nova instância de UploadBean
     */
    public uploadFilesBean() {
    }
    
     /*
      Recupera o nome do arquivo upado
      */
         private static String getFilename(Part part) {
        for (String cd : part.getHeader("content-disposition").split(";")) {
            if (cd.trim().startsWith("filename")) {
                String filename = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
                return filename.substring(filename.lastIndexOf('/') + 1).substring(filename.lastIndexOf('\\') + 1); // MSIE fix.
            }
        }
        return null;
    }
    
// realiza o upload do arquivo
    public void handleFileUpload(FileUploadEvent event) {

        
        try {
            File targetFolder = new File("C:\\uploads\\");
            InputStream inputStream = event.getFile().getInputstream();
            OutputStream out = new FileOutputStream(new File(targetFolder,
                    event.getFile().getFileName()));
            String caminho = "C:\\uploads\\" + event.getFile().getFileName(); 
            System.out.println("Caminho: " + caminho); 
            int read = 0;
            byte[] bytes = new byte[1024];

            while ((read = inputStream.read(bytes)) != -1) {
                out.write(bytes, 0, read);
            }
            inputStream.close();
            out.flush();
            out.close();
            
            FacesMessage msg =
                    new FacesMessage("Arquivo enviado com sucesso!", "Nome do arquivo: "
                    + event.getFile().getFileName() + "\n\nTamanho do arquivo: "
                    + event.getFile().getSize() / 1024 
                    + " Kb" + "\n" + "Tipo de arquivo: "
                    + event.getFile().getContentType());
                    //+ "\nO arquivo foi enviado com sucesso!"
            FacesContext.getCurrentInstance().addMessage(null, msg);
        } catch (IOException e) {
            e.printStackTrace();
            
            FacesMessage error = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Erro! O arquivo não foi enviado.", "");
            FacesContext.getCurrentInstance().addMessage(null, error);
        }
    }
}